package com.ruoyi.system.service.impl;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.persistence.criteria.Predicate;
import javax.transaction.Transactional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;

import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.dao.SysNoticeDAO;
import com.ruoyi.system.domain.SysNotice;
import com.ruoyi.system.service.ISysNoticeService;

/**
 * 公告 服务层实现
 * 
 * @author ruoyi
 */
@Service
public class SysNoticeServiceImpl implements ISysNoticeService
{
    @Autowired
    private SysNoticeDAO noticeDAO;

    /**
     * 查询公告信息
     * 
     * @param noticeId 公告ID
     * @return 公告信息
     */
    @Override
    public SysNotice selectNoticeById(Long noticeId)
    {
        return noticeDAO.getById(noticeId);
    }

    /**
     * 查询公告列表
     * 
     * @param notice 公告信息
     * @return 公告集合
     */
    @Override
    public List<SysNotice> selectNoticeList(SysNotice notice)
    {
    	Specification<SysNotice> specification = (root, criteriaQuery, criteriaBuilder) -> {
			List<Predicate> predicateList = new ArrayList<>();
			
			if (!StringUtils.isEmpty(notice.getNoticeTitle())) {
				predicateList.add(criteriaBuilder.equal(root.get("noticeTitle"), notice.getNoticeTitle()));
			}
			if (!StringUtils.isEmpty(notice.getNoticeType())) {
				predicateList.add(criteriaBuilder.equal(root.get("noticeType"), notice.getNoticeType()));
			}
			if (!StringUtils.isEmpty(notice.getCreateBy())) {
				predicateList.add(criteriaBuilder.equal(root.get("createBy"), notice.getCreateBy()));
			}
			
			Predicate[] p = new Predicate[predicateList.size()];
			return criteriaBuilder.and(predicateList.toArray(p));
		};
		
		
        return noticeDAO.findAll(specification);
    }

    /**
     * 新增公告
     * 
     * @param notice 公告信息
     * @return 结果
     */
    @Transactional
    @Override
    public int insertNotice(SysNotice notice)
    {
    	noticeDAO.save(notice);
        return 1;
    }

    /**
     * 修改公告
     * 
     * @param notice 公告信息
     * @return 结果
     */
    @Transactional
    @Override
    public int updateNotice(SysNotice notice)
    {
    	noticeDAO.save(notice);
        return 1;
    }

    /**
     * 删除公告对象
     * 
     * @param noticeId 公告ID
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteNoticeById(Long noticeId)
    {
    	noticeDAO.deleteById(noticeId);
        return 1;
    }

    /**
     * 批量删除公告信息
     * 
     * @param noticeIds 需要删除的公告ID
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteNoticeByIds(Long[] noticeIds)
    {
    	noticeDAO.deleteAllByIdInBatch(Arrays.asList(noticeIds));
        return 1;
    }
}
